const midlog = require('midlog')
const path = require('path')
const logdir = path.join(__dirname, '../../logs')

/*
* midlog采用和log4js相同的layout格式和语法，生成可定制的日志输出格式
*
* 3种日志刷新级别:
*   TRACE、INFO、ERROR
*
* 并且提供了两种写日志文件的方式：
*   1. 单文件写 （通过设置appender的rollingFile为false触发）
*   2. 文件分时间片写 （通过设置appender的rollingFile为true触发）
*
* rollingFile == true 格式定义的字符串意义如下所示：
*    'd': 日期和时间,
*    'h': 主机名称,
*    'm': 日志信息格式化，主要优化错误输出,
*    'n': 换行符,
*    'p': 日志级别,
*    'r': 时间输出,
*    'z': 进程号输出,
*    '%': 百分号占位符,
*    'x': 用户自定义变量或函数，搭配{token}属性
*
* 使用方式一：
*   ctx.logger.info('midlog info valve!!')
*   ctx.logger.error('midlog error valve!!')
*   ctx.logger.trace('midlog tracing valve!!')
*
* 使用方式二：
*   global.logger.info('midlog info valve!!')
*   global.logger.error('midlog error valve!!')
*   global.logger.trace('midlog trace valve!!')
* */

module.exports = midlog({
  env: 'online', // env {String} 环境设置。若设置为development，则会在控制台和文件中同时输出日志
  exportGlobalLogger: true, // exportGlobalLogger {Boolean} 是否保留全局logger对象。设置为true，则在全局使用logger对象
  appender: [{
    type: 'INFO', // 日志类型。可以为 “INFO、TRACE和ERROR” 任意一种
    logdir, // 日志文件所在的绝对目录
    pattern: '%d - %m%n',
    rollingFile: false, // 是否按照时间进行日志文件分割。设置为true时则按照设置的duration间隔分割文件
    duation: 60 * 1000, // 分割日志文件的间隔。若rollingFile为true，则按照duration大小分割文件
    name: 'info.log', // 日志文件名称。name属性在单文件写模式下有效，在rollingFile == true时无效
    nameformat: '[info.]HH-mm-ss[.log]', // 日志文件格式匹配定义。nameformat属性在文件分时间片写模式下有效
    tokens: { // 与nameformat搭配使用，对象的属性值可为常亮，也可为函数
      name: 'process'
    },
    /*
        * 缓冲大小，单位字节。midlog在单文件写模式下采用双缓冲结构控制I/O速率，
        * 因此开发者可以通过定义缓冲大小实现高效的写入流程，默认为10kB大小；在文件分时间片写模式下该选项无效
        */
    cacheSize: 5 * 1024 * 1024,
    flushTimeout: 15000 // 缓冲刷新间隔。在单文件写和文件分时间片写两种模式下都起作用，定点刷新缓冲
  }, {
    type: 'ERROR',
    logdir,
    pattern: '%d - %m%n',
    rollingFile: false,
    duation: 60000,
    name: 'error.log',
    nameformat: '[info.]HH-mm-ss[.log]',
    tokens: {
      name: 'process'
    },
    cacheSize: 10 * 1024,
    flushTimeout: 10000
  }, {
    type: 'TRACE',
    logdir,
    pattern: '%d - %m%n',
    rollingFile: false,
    duation: 60000,
    name: 'trace.log',
    nameformat: '[info.]HH-mm-ss[.log]',
    tokens: {
      name: 'process'
    },
    cacheSize: 5 * 1024 * 1024,
    flushTimeout: 10000
  }]
})
